package com.qf.md.type.service.impl;

import com.qf.entity.md.type.MdItemType;
import com.qf.exception.CustomerException;
import com.qf.md.type.dao.MdItemTypeDao;
import com.qf.md.type.service.MdItemTypeService;
import com.qf.md.type.vo.MdItemTypeVO;
import com.qf.utils.RedisUtil;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

/**
 * @author zdl
 * @date 2025/2/28
 */
@Service
public class MdItemTypeServiceImpl implements MdItemTypeService {
    @Resource
    private MdItemTypeDao mdItemTypeDao;
    @Resource
    private RedisUtil redisUtil;
    @Override
    public List<MdItemTypeVO> queryAllMdItemType() {
        return mdItemTypeDao.selectAllMdItemType();
    }

    @Override
    public List<MdItemTypeVO> queryByItemNameOrEnableFlag(String itemName, String enableFlag) {
        //先从缓存中取出数据
        List<MdItemTypeVO> list = redisUtil.getCacheObject("md:mdItemType");
        //缓存中没有数据，则从数据库中查询
        if (list == null || list.isEmpty()){
            System.out.println("==================================从数据库中查询数据==========================================");
            list = mdItemTypeDao.selectByItemNameOrEnableFlag(itemName, enableFlag);
            //将查询结果存入缓存中
            redisUtil.setCacheObject("md:mdItemType",list);
            if (list == null){
                throw  new CustomerException("7001","查询无数据");
            }
        }

        return list;
    }

    @Override
    public Long delByItemTypeId(Long itemTypeId) {
        List<MdItemType> mdItemTypes = mdItemTypeDao.selectByParentTyeId(itemTypeId);
        if (mdItemTypes != null && !mdItemTypes.isEmpty()){
            throw new CustomerException("7002","该类为父类，其下含有子类，无法直接删除");
        }
        MdItemType mdItemType = mdItemTypeDao.selectByItemTypeId(itemTypeId);
        if (mdItemType.getEnableFlag().equals("Y")){
            throw  new CustomerException("7003","该数据为启动状态无法删除");
        }
        Long l = mdItemTypeDao.delTypeByItemTypeId(itemTypeId);
        redisUtil.deleteObject("md:mdItemType");
        return l;
    }

    @Override
    public Long addMdType(MdItemType mdItemType) {
        //查询拼接ancestors字段
        MdItemType mdItemType1 = mdItemTypeDao.selectByItemTypeId(mdItemType.getParentTypeId());
        String ancestors = mdItemType1.getAncestors();
        mdItemType.setAncestors(ancestors + ","+mdItemType.getParentTypeId());
        mdItemType.setCreateTime(new Date());
        Long l = mdItemTypeDao.insertMdType(mdItemType);
        redisUtil.deleteObject("md:mdItemType");
        return l;
    }

    @Override
    public MdItemType queryByItemTypeId(Long itemTypeId) {
        return mdItemTypeDao.selectByItemTypeId(itemTypeId);
    }

    @Override
    public Long updateType(MdItemType mdItemType) {

        mdItemType.setUpdateTime(new Date());
        Long l = mdItemTypeDao.updateType(mdItemType);
        redisUtil.deleteObject("md:mdItemType");
        return l;
    }
}
